package com.webserver.Controller;

import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;
import com.webserver.vo.User;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

//本类用于处理与用户相关的请求操作：
public class UserController {
    //该File对象表示用于表示所有用户信息保存的目录：
    private static File userDir;

    static{
        userDir = new File("./users");
        if (!userDir.exists()){
            userDir.mkdirs();//如果不存在则创建该文件
        }
    }
    



    /*
        处理用户注册操作的请求：
     */
    public void reg(HttpServletRequest request, HttpServletResponse response){
        System.out.println("开始处理注册...");

    //1、获取用户在注册页面上表单中提交上来的注册信息
        //调用getParameter用于获取浏览器传递过来的参数.
        //参数与表单中输入框的名字一致
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String nickname = request.getParameter("nickname");
        String ageStr = request.getParameter("age");
        System.out.println(username+","+password+","+nickname+","+ageStr);

        /*
            必要的验证工作：
            1：要求上述四个信息用户必须在页面上输入，不能有null
            2：:年龄必须是一个数字格式
            否则直接响应一个页面：reg_info_error.html
            该页面居中显示一行字：注册失败，注册信息输入有误，请重新输入！
         */


        if (username == null || password==null || nickname==null ||
                ageStr==null || !ageStr.matches("[0-9]+")) {
            //
            File file = new File("./webapps/myweb/reg_info_error.html");
            response.setEntity(file);
            return;
        }

        /*
            用户名是否已存在的验证：
            若以存在，提示：该用户已存在，请重新注册
        */
        File userFile = new File(userDir,username+".obj");
        if (userFile.exists()){
            File file = new File("./webapps/myweb/reg_have_user.html");
            response.setEntity(file);//返回给响应
            return;
        }



        int age = Integer.parseInt(ageStr);//使用int包装类将age转换为int型
    //2、将该用户信息保存：
       //讲当前用户以一个User对象形式序列化到文件中：
        User user = new User(username, password, nickname,age);
        try (
                    ObjectOutputStream oos = new ObjectOutputStream(
                            new FileOutputStream(
                                    new File(userDir, username + ".obj")
                            )
                    );
            ) {
                oos.writeObject(user);
                System.out.println("写出完毕！！");

                File file = new File("./webapps/myweb/reg_success.html");
                response.setEntity(file);
            } catch (IOException e) {
                e.printStackTrace();
            }


        //3、设置响应对象给用户回馈注册结果：


        System.out.println("注册处理完毕。。。");
    }

    public void login(HttpServletRequest request, HttpServletResponse response){
        System.out.println("处理登录。。。");

    //获取用户输入的用户名和密码：
        String username = request.getParameter("username");
        String password = request.getParameter("password");

    //验证工作（验证用户名与密码）：
        if (username==null || password==null){
            File file = new File("./webapps/myweb/login_error.html");
            response.setEntity(file);
            return;
        }

        /*找文件，与文件中的内容比较*/
        File isUser = new File(userDir,username+".obj");
        if (!isUser.exists()){//如果文件不存在
            response.setEntity(new File("./webapps/myweb/login_fail.html"));
            return;
        }
        else {//反之，如果文件存在
            try (//处理下列两行的异常
                    ObjectInputStream os = new ObjectInputStream(
                            new FileInputStream(isUser))
            ) {
                User o = (User)os.readObject();//反序列化
                if (password.equals(o.getPassword())) {
                    //比较密码：如果密码一致则:
                    File file = new File("./webapps/myweb/login_success.html");
                    response.setEntity(file);
                    return;
                } else {//反之，密码不一致> 则登录失败
                    response.setEntity(new File("./webapps/myweb/login_fail.html"));
                    return;
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e){

            }

        }
    }
}
